library(tidyverse)
library(readxl)
library(patchwork)
library(kableExtra)
library(knitr)
library(ranger)
library(vip)
library(rpart)
library(rpart.plot)

Pitch Horizontal Vertical Pitch Proportion Spin Rate
4-Seamer 7.45 14.86 0.46 2285.29
Changeup 14.03 32.27 0.26 1754.87
Curveball 9.45 53.35 0.26 2572.18
Cutter 2.88 25.97 0.34 2380.57
Sinker 15.00 22.89 0.39 2127.16
Slider 6.42 36.28 0.34 2432.44
Splitter 11.71 33.09 0.28 1459.77

Pitch Classifications for Stuff+
Class Stf+ Range
1 < 55
2 < 70
3 < 85
4 < 95
5 < 105
6 < 115
7 < 130
8 < 145
9 < 160
10 ≥ 160

## Ranger result
## 
## Call:
##  ranger(woba ~ ., data = tree_input, num.trees = 1000, importance = "impurity") 
## 
## Type:                             Regression 
## Number of trees:                  1000 
## Sample size:                      2074 
## Number of independent variables:  18 
## Mtry:                             4 
## Target node size:                 5 
## Variable importance mode:         impurity 
## Splitrule:                        variance 
## OOB prediction error (MSE):       0.002036857 
## R squared (OOB):                  0.5904444

## 
## Call:
## lm(formula = woba ~ pitch_stuff + pitcher_break_z + pitcher_break_x + 
##     avg_speed + spin_rate + pitch_per + fb_stuff + fb_thrown + 
##     speed_diff, data = .)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.167954 -0.037116 -0.003074  0.034631  0.254951 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      3.293e-01  7.465e-02   4.412 1.13e-05 ***
## pitch_stuff     -1.856e-03  1.216e-04 -15.264  < 2e-16 ***
## pitcher_break_z  2.866e-04  3.550e-04   0.807  0.41961    
## pitcher_break_x  4.391e-05  3.382e-04   0.130  0.89672    
## avg_speed        1.630e-03  8.364e-04   1.949  0.05154 .  
## spin_rate        3.615e-05  5.304e-06   6.814 1.57e-11 ***
## pitch_per       -4.259e-02  2.086e-02  -2.042  0.04140 *  
## fb_stuff        -3.970e-04  1.220e-04  -3.254  0.00117 ** 
## fb_thrown       -7.399e-06  6.273e-06  -1.179  0.23848    
## speed_diff       2.478e-03  8.582e-04   2.888  0.00396 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.05541 on 1084 degrees of freedom
## Multiple R-squared:  0.3594, Adjusted R-squared:  0.3541 
## F-statistic: 67.58 on 9 and 1084 DF,  p-value: < 2.2e-16

## 
## Call:
## lm(formula = woba ~ pitcher_break_z + pitcher_break_x + avg_speed + 
##     spin_rate, data = .)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.175665 -0.045925 -0.005587  0.043604  0.251960 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      4.012e-01  7.650e-02   5.244 1.88e-07 ***
## pitcher_break_z -2.084e-03  3.746e-04  -5.564 3.32e-08 ***
## pitcher_break_x  4.733e-04  3.980e-04   1.189    0.235    
## avg_speed       -6.843e-04  7.973e-04  -0.858    0.391    
## spin_rate        9.159e-06  6.051e-06   1.514    0.130    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.06634 on 1089 degrees of freedom
## Multiple R-squared:  0.0773, Adjusted R-squared:  0.07391 
## F-statistic: 22.81 on 4 and 1089 DF,  p-value: < 2.2e-16

Sliders

Fastballs (Four-Seam, Cutter, Sinker)

Curveballs

Change-Up (Change-Up / Splitter)

seq2022<- seq2022 %>% 
  rename(Name = ...1)

seq2022 <- cbind(seq2022$Name, seq2022 %>% 
  select(-Name) %>% 
  mutate_all(.funs = ~ . / 100)) %>% 
  rename(Name = `seq2022$Name`)

test <- seq2022 %>% 
  select(Name, `FF-SL`)

test %>% 
  ggplot(aes(x = `FF-SL`)) +
  geom_histogram(color = "white", fill = "black", binwidth = 0.01)
## Warning: Removed 94 rows containing non-finite values (`stat_bin()`).